#ifndef FIBONACCI_H
#define FIBONACCI_H
#include <vector>
#include <cassert>
// 斐波那契数列，并限定在前70个，使用方式 Fib f；f(1);
class Fib
{
public:
    Fib() = default;
    ~Fib() = default;
    long long operator[](size_t index)
    {
        assert(index <= 70);
        if (index >= nums.size()) {
            generate(index);
        }
        return nums[index];
    }
    static void generate(size_t index)
    {
        for (size_t i = nums.size(); i <= index; ++i) {
            nums.push_back(nums[i - 1] + nums[i - 2]);
        }
    }
    static std::vector<long long> nums;
};
std::vector<long long> Fib::nums{0, 1, 1};
#endif